package main

import (
	"fmt"
	"log"

	"github.com/streadway/amqp"
)

func main() {
	// 连接到RabbitMQ服务器
	conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/")
	if err != nil {
		log.Fatal(err)
	}
	defer conn.Close()

	// 创建一个频道
	ch, err := conn.Channel()
	if err != nil {
		log.Fatal(err)
	}
	defer ch.Close()

	// 声明交换机
	err = ch.ExchangeDeclare(
		"chat_group", // 交换机名称
		"fanout",     // 交换机类型（fanout用于广播）
		true,         // 是否持久化
		false,        // 是否自动删除
		false,        // 是否等待消费者
		false,        // 是否等待消费者
		nil,          // 额外参数
	)
	if err != nil {
		log.Fatal(err)
	}

	// 循环等待用户输入
	for {
		// 提示用户输入消息
		fmt.Println("Enter a message to send to the group chat (type 'exit' to quit):")
		var message string
		_, err := fmt.Scanln(&message)
		if err != nil {
			log.Fatal(err)
		}

		// 如果用户输入 "exit"，则退出循环
		if message == "exit" {
			log.Println("Exiting the program...")
			break
		}

		// 发送群聊消息
		err = ch.Publish(
			"chat_group", // 交换机名称
			"",           // 路由键为空（fanout交换机会广播消息）
			false,        // 是否持久化
			false,        // 是否确认
			amqp.Publishing{
				ContentType: "text/plain",
				Body:        []byte(message),
			},
		)
		if err != nil {
			log.Fatal(err)
		}

		log.Printf(" [x] Sent: %s", message)
	}
}
